/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package stalkerdns;

import java.io.*;
import java.net.*;
import java.net.Socket;
import java.util.Hashtable;
import java.util.Scanner;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.xml.sax.SAXException;

public class StalkerDNS {

    public static Hashtable Tabela = new Hashtable();

    public static void main(String[] args) {
        try {
            int port = 0; // porta passada

            //le arquivo.ini
            String FileName = "stalker.ini";
            boolean fileexists = (new File(FileName)).exists();
            if (fileexists) {
                InputStream is = new FileInputStream(FileName);
                Scanner entrada = new Scanner(is);
                String str;

                while (entrada.hasNextLine()) {
                    str = entrada.nextLine().trim();
                    if (str.contains("PORTA")) {
                        port = Integer.parseInt(str.substring(str.indexOf("=") + 1, str.length()));
                    }
                }
                is.close();
            } else {
                throw new Exception("Arquivo.ini nao encontrado no diretorio raiz");
            }

            // criando o socket passivo, para receber conexões
            // e j� coloca o mesmo para "listen" (poderia fazer isso explicitmente)
            ServerSocket ss = new ServerSocket(port);

            System.out.println("Server is listening ...");

            // loop: aceita conexão...
            //       cria Worker pasasndo o socket ativo
            //       inicia a thread do Worker
            //       volta para aguardar nova conexão
            while (true) {
                Socket as = ss.accept(); // socket ativo criado
                System.out.println("Nova conexão estabelecida ...");

                DNSWorker w = new DNSWorker(as, Tabela);
                w.start();

                System.out.println("Servidor aguardando nova conexão...");
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}
